package com.za.upgradeshield;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;

import java.util.List;

/**
 * Shield 拦截器的配置项。
 * <p>
 * 支持配置是否启用、拦截路径、响应体内容等。用于在业务运行中通过配置中心（如 Nacos）动态调整拦截行为。
 * </p>
 *
 * <pre>{@code
 * shield:
 *   enabled: true
 *   paths:
 *     - /api/v1/migrate/**
 *   response:
 *     code: 403
 *     message: 接口暂时不可访问，请稍后重试
 * }</pre>
 */
@ConfigurationProperties(prefix = "shield")
@RefreshScope
public class ShieldProperties {

    /**
     * 是否启用接口
     * 默认为 false，当设置为 true 时将开始判断 paths
     */
    private boolean enabled = false;

    /**
     * 需要被拦截的路径（支持通配符，例如 "/api/**"）。
     * 若请求 URI 匹配这些路径之一，则执行拦截逻辑并返回指定响应体。
     */
    private List<String> paths;

    /**
     * 拦截后的默认响应配置。
     */
    private ShieldResponseConfig response = new ShieldResponseConfig();

    /**
     * 定义默认的响应体结构（响应码与提示信息）。
     * 可通过配置中心动态调整内容。
     */
    public static class ShieldResponseConfig {

        /**
         * 拦截返回的状态码，默认 500
         */
        private Integer code = 500;

        /**
         * 拦截返回的提示信息
         */
        private String message = "系统升级中,部分功能暂时不可用。预计将于1小时内完成,请稍后再试。";

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public List<String> getPaths() {
        return paths;
    }

    public void setPaths(List<String> paths) {
        this.paths = paths;
    }

    public ShieldResponseConfig getResponse() {
        return response;
    }

    public void setResponse(ShieldResponseConfig response) {
        this.response = response;
    }
}